
import projectConfig from '../core/config';
import {
	buildGetUrl,
	getObjectFromSessionStorage
} from '@/utils/index.js';

import dayjs from 'dayjs';
import CustomParseFormat from 'dayjs/plugin/customParseFormat';
import IsBetween from 'dayjs/plugin/isBetween';
dayjs.extend(CustomParseFormat);
dayjs.extend(IsBetween);

/**
 * 上传文件组件相关方法
 */
const uploadMixin = {
	methods: {
		/**
		 * 解析返回的上传文件数据
		 * @param {String} jsonData 上传文件数据，[{name, downloadUri, filename}]
		 * @param {Object} params 上传文件的参数
		 * @returns {Array} 上传文件信息，[{name, downloadUri, filename, url}]
		 */
		parseUploadData(jsonData, params) {
			let pathList = [];
			// console.log(jsonData);
			
			if (jsonData != null) {
				try {
					pathList = JSON.parse(jsonData);
				} catch (e) {
					pathList = jsonData
					// console.error(e);
				}
			}

			return Array.isArray(pathList) ? pathList.map((item) => {
				let downloadParams = {
					...params
				};
				downloadParams.filename = item.filename;
				return {
					...item,
					url: this.getUploadFileUrl(item, downloadParams)
				}
			}) : [];
		},
		/**
		 * 获得上传文件url列表
		 * @param {*} jsonData 上传文件数据，[{name, downloadUri, filename}]
		 * @param {*} params 上传文件的参数
		 * @returns {Array} 文件url列表
		 */
		getPictureList(jsonData, params) {
			let tempList = this.parseUploadData(jsonData, params);
			if (Array.isArray(tempList)) {
				return tempList.map(item => item.url);
			} else {
				return [];
			}
		},
		/**
		 * 将选中文件信息格式化成json信息
		 * @param {Array} fileList 上传文件列表，[{name, fileUrl, data}]
		 */
		fileListToJson(fileList) {
			if (Array.isArray(fileList)) {
				return JSON.stringify(fileList.map((item) => {
					return {
						name: item.name,
						downloadUri: item.downloadUri || item.response.data.downloadUri,
						filename: item.filename || item.response.data.filename,
						uploadPath: item.uploadPath || item.response.data.uploadPath
					}
				}));
			} else {
				return undefined;
			}
		},
		/**
		 * 获得上传文件url
		 * @param {*} item 上传文件
		 * @param {*} params 上传文件的参数
		 */
		getUploadFileUrl(item, params) {
			// console.log(item)
			if (item == null || item.downloadUri == null) {
				return null;
			} else {
				let currentMenuId = getObjectFromSessionStorage('currentMenuId');
				params.Authorization = uni.getStorageSync('token');
				params.MenuId = currentMenuId;
				return buildGetUrl(item.downloadUri, params);
			}
		},
		/**
		 * 获得上传接口
		 * @param {*} url 上传路径
		 */
		getUploadActionUrl(url) {
			if (url != null && url[0] === '/') {
				url = url.substr(1);
			}
			return projectConfig.baseUrl + url;
		},
		/**
		 * 上传文件是否图片文件
		 * @param {*} file 上传文件
		 */
		pictureFile(file) {
			if (['image/jpeg', 'image/jpg', 'image/png'].indexOf(file.type) !== -1) {
				return true;
			} else {
				Notify({
					type: 'warning',
					message: '图片文件格式不正确，请重新选择'
				});
				return false;
			}
		}
	},
	computed: {
		getUploadHeaders() {
			let token = uni.getStorageSync('token');
			let menuIdJsonStr = uni.getStorageSync('currentMenuId');
			let currentMenuId;
			// console.log(menuIdJsonStr)
			// console.log(typeof(menuIdJsonStr))
			if (menuIdJsonStr != null && menuIdJsonStr != '') {
				currentMenuId = (JSON.parse(menuIdJsonStr) || {}).data;
			}
			let header = {
				Authorization: token,
				MenuId: currentMenuId,
				// "Content-Type": "multipart/form-data"
			}
			return header;
		}
	}
};
const allowStatsType = [
  'time',
  'datetime',
  'day',
  'month',
  'year'
];
/**
 * 日期相关方法
 */
const statsDateRangeMixin = {
  methods: {
    /**
     * 将输入日期转化成日期范围
     * @param {*} date 输入日期
     * @param {*} statsType 转换类型（day, month, year）
     * @param {*} format 输入日期格式
     */
    getDateRangeFilter (date, statsType = 'day', format = 'YYYY-MM-DD') {
      let tempDateRange = [];
      let outFormat = 'YYYY-MM-DD HH:mm:ss';
      if (Array.isArray(date)) {
        tempDateRange[0] = dayjs(date[0], format);
        tempDateRange[1] = dayjs(date[1], format);
      } else {
        tempDateRange[0] = dayjs(date, format);
        tempDateRange[1] = dayjs(date, format);
      }
      if (!tempDateRange[0].isValid() || !tempDateRange[1].isValid()) return [];
      statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType;
      console.log(tempDateRange.map((item) => item.format(outFormat)), statsType);
      switch (statsType) {
        case 'day':
          tempDateRange[0] = tempDateRange[0].startOf('day');
          tempDateRange[1] = tempDateRange[1].endOf('day');
          break;
        case 'month':
          tempDateRange[0] = tempDateRange[0].startOf('month');
          tempDateRange[1] = tempDateRange[1].endOf('month');
          break;
        case 'year':
          tempDateRange[0] = tempDateRange[0].startOf('year');
          tempDateRange[1] = tempDateRange[1].endOf('year');
          break;
        default:
          break;
      }
      return tempDateRange.map((item) => item.format(outFormat));
    },
    /**
     * 格式化日期
     * @param {Date|String} date 要格式化的日期
     * @param {String} statsType 输出日期类型
     * @param {String} format 输入日期的格式
     */
    formatDateByStatsType (date, statsType = 'day', format = 'YYYY-MM-DD') {
      if (date == null) return undefined;
      if (statsType == null) return date;
      let tempDate = dayjs(date, format);
      if (!tempDate.isValid()) return date;

      statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType;
      if (statsType === 'datetime') format = 'yyyy-MM-dd HH:mm:ss';
      switch (statsType) {
        case 'time':
          return tempDate.format('HH:mm:ss');
        case 'datetime':
          return tempDate.format('YYYY-MM-DD HH:mm:ss');
        case 'day':
          return tempDate.format('YYYY-MM-DD');
        case 'month':
          return tempDate.format('YYYY-MM');
        case 'year':
          return tempDate.format('YYYY');
        default:
          return tempDate.format('YYYY-MM-DD');
      }
    },
    /**
     * 获得统计类型中文名称
     * @param {String} statsType 统计类型（day, month, year）
     */
    getStatsTypeShowName (statsType) {
      statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType;
      switch (statsType) {
        case 'day': return '日统计';
        case 'month': return '月统计';
        case 'year': return '年统计';
      }
    },
    /**
     * 获取统计类型字典列表
     * @param {Array} statsTypeList 统计类型列表
     */
    getAllowStatsTypeList (statsTypeList) {
      if (Array.isArray(statsTypeList) && statsTypeList.length > 0) {
        return statsTypeList.map((item) => {
          return {
            id: item,
            name: this.getStatsTypeShowName(item)
          }
        });
      } else {
        return [];
      }
    }
  }
}
export {
	uploadMixin,
	statsDateRangeMixin
}
